package com.py.androidUtils.base;

import com.py.androidUtils.task.MyTaskListener;
import com.py.androidUtils.task.TaskItem;
import com.py.androidUtils.task.TaskThread;

import android.content.Context;

/**
 * 
 * @说明 请求数据BaseAction
 * @作者 LY
 * @文件 BaseAction.java
 * @时间 2015年6月12日 下午2:04:45
 * @版权 Copyright(c) 2014 LY-版权所有
 */
public abstract class BaseAction {
	protected Context context;
	protected TaskItem taskItem;
	protected TaskThread taskThread;
	protected TaskListener taskListener;

	public BaseAction(Context context) {
		this.context = context;
	}

	/**
	 * 调用此方法开始异步任务
	 */
	public void execute() {
		taskThread = new TaskThread();
		taskItem = new TaskItem();
		taskItem.setListener(new MyTaskListener() {
			@Override
			public void pre() {
				super.pre();
				if (null != taskListener) {
					taskListener.onPreExecute();
				}
			}

			@Override
			public void get() {
				super.get();
				doInbackground();
			}

			@Override
			public void update() {
				super.update();
				if (null != taskListener) {
					taskListener.onPostExecute();
				}
			}
		});
		taskThread.execute(taskItem);
	}

	/**
	 * 调用此方法更新界面 主要调用 TaskListener.onPostExecute()回调到界面
	 * 
	 * @param item
	 */
	public void update(Object item) {
		taskThread.update(item);
	}

	/**
	 * 获取传递的数据
	 * 
	 * @return
	 */
	public Object getData() {
		return taskItem.getResult();
	}

	/**
	 * 异步操作，主要的异步请求实现方法
	 */
	protected abstract void doInbackground();

	/**
	 * @说明 任务请求完成界面更新回调
	 * @作者 LY
	 * @文件 BaseAction.java
	 * @时间 2015年6月12日 下午2:06:21
	 * @版权 Copyright(c) 2014 LY-版权所有
	 */
	public interface TaskListener {
		public abstract void onPreExecute();

		public abstract void onPostExecute();
	}

	public void setTaskListener(TaskListener taskListener) {
		this.taskListener = taskListener;
	}

}
